

//2506.统计相似字符串对的数目
class Solution {
public:
    int similarPairs(vector<string>& words) {
        //对1-26个英文字母可以使用26个比特位进行标记,也就是可以用一个整形来表示一个字符串中字符的种类
        int n=words.size();
        unordered_map<int,int> m; //存储左右字符串包含的字符种类

        auto build=[](string& s)
        {
            int x=0;
            for(auto& e:s)
            {
                int pos=e-'a';
                x|=(1<<pos);   //将每个字符的情况映射到比特位上
            }
            return x;
        };

        int ret=0;
        for(int i=0;i<n;i++)
        {
            int need=build(words[i]);
            if(m.count(need)) ret+=m[need];

            m[need]++;
        }
        return ret;
    }
};